/**
 * archivo:Juego.java
 * autor: acabrera
 * fecha: 10/10/2011
 */
package ar.org.libre.truco.api;

import java.util.HashSet;
import java.util.Set;

import org.apache.log4j.Logger;

import ar.org.libre.truco.api.util.NaipeUtil;
import ar.org.libre.truco.api.util.Palos;



/**
 * @author acabrera
 * @since 10/10/2011
 */
public class Juego {

	/**
	 * 
	 */
	private Set<Naipe> naipes;
	private static final Logger log=Logger.getLogger(Juego.class);
	
	/**
	 * @return the naipes
	 */
	public Set<Naipe> getNaipes() {
		if(naipes==null){
			this.naipes=new HashSet<Naipe>();
		}
		return naipes;
	}

	/**
	 * @param naipes the naipes to set
	 */
	public void setNaipes(Set<Naipe> naipes) {
		this.naipes = naipes;
	}
	/**
	 * defino si existe o no el envido en el juego.
	 * @return
	 */
	public boolean isEnvido(){
		boolean bandera=Boolean.FALSE;
		if(naipes.size()==3){					
					int x=1;
					while(x<=4){
		
						switch (x) {
						case 1:
							log.info("segunda con tercera--->"+((Naipe)naipes.toArray()[1]).getPalo().equals(((Naipe)naipes.toArray()[2]).getPalo()));
							if(((Naipe)naipes.toArray()[1]).getPalo().equals(((Naipe)naipes.toArray()[2]).getPalo())){
								bandera=Boolean.TRUE;
							}
							break;
						case 2:
							log.info("primera con tercera---->"+((Naipe)naipes.toArray()[0]).getPalo().equals(((Naipe)naipes.toArray()[2]).getPalo()));
							if(((Naipe)naipes.toArray()[0]).getPalo().equals(((Naipe)naipes.toArray()[2]).getPalo())){
								bandera=Boolean.TRUE;
							}
							break;	
						case 3:
							log.info("primero con segunda---->"+((Naipe)naipes.toArray()[0]).getPalo().equals(((Naipe)naipes.toArray()[1]).getPalo()));
							if(((Naipe)naipes.toArray()[0]).getPalo().equals(((Naipe)naipes.toArray()[1]).getPalo())){
								bandera=Boolean.TRUE;
							}
							break;
						case 4:
							log.debug("En el caso de tener flor");
							log.info("flor-->"+((Naipe)naipes.toArray()[1]).getPalo().equals(((Naipe)naipes.toArray()[2]).getPalo()));
							if(((Naipe)naipes.toArray()[1]).getPalo().equals(((Naipe)naipes.toArray()[2]).getPalo())){
								bandera=Boolean.TRUE;
							}
							break;	
						}
						x++;
					}
					
				
				}
		
		return bandera;
	}
	/**
	 * obtengo el envido del {@link Juego}
	 * @return
	 */
	public int getEnvido(){
		int envido=20;
		if(naipes.size()==3){					
			int x=1;
			while(x<=3){

				switch (x) {
				case 1:
					log.info("segunda con tercera--->"+((Naipe)naipes.toArray()[1]).getPalo().equals(((Naipe)naipes.toArray()[2]).getPalo()));
					if(((Naipe)naipes.toArray()[1]).getPalo().equals(((Naipe)naipes.toArray()[2]).getPalo())){
							int parcial=20;
							parcial+=NaipeUtil.valorEnvido(((Naipe)naipes.toArray()[1]).getValor() , ((Naipe)naipes.toArray()[2]).getValor());
							envido=parcial>envido?parcial:envido;
					}
					break;
				case 2:
					log.info("primera con tercera---->"+((Naipe)naipes.toArray()[0]).getPalo().equals(((Naipe)naipes.toArray()[2]).getPalo()));
					if(((Naipe)naipes.toArray()[0]).getPalo().equals(((Naipe)naipes.toArray()[2]).getPalo())){						
						int parcial=20;
						parcial+=NaipeUtil.valorEnvido(((Naipe)naipes.toArray()[0]).getValor() , ((Naipe)naipes.toArray()[2]).getValor() );
						envido=parcial>envido?parcial:envido;
					}
					break;	
				case 3:
					log.info("primero con segunda---->"+((Naipe)naipes.toArray()[0]).getPalo().equals(((Naipe)naipes.toArray()[1]).getPalo()));
					if(((Naipe)naipes.toArray()[0]).getPalo().equals(((Naipe)naipes.toArray()[1]).getPalo())){
						int parcial=20;
						parcial+=NaipeUtil.valorEnvido(((Naipe)naipes.toArray()[0]).getValor() , ((Naipe)naipes.toArray()[1]).getValor() );
						envido=parcial>envido?parcial:envido;
					}
					break;					
				}
				x++;
			}		
		}		
		return envido;
	}

	public boolean isMato(Naipe mio,Naipe otro){
		if(NaipeUtil.resultadoPelea(mio,otro)==1)
				return Boolean.TRUE;
		return Boolean.FALSE;
	}

}
